package localVariable;

/**
 * java -verbose:gc localVariable/Test
 * [0.010s][info][gc] Using G1
 * [0.117s][info][gc] GC(0) Pause Full (System.gc()) 67M->66M(228M) 2.628ms
 * 分析：
 * 这里不进行gc是因为局部变量表的slot复用机制
 * placeholder超出作用范围后局部变量任然在引用
 * 这是int a=12;对未释放的内存空间进行引用垃圾回收就可以吧多余的内存回收回去了
 */
public class Test {
    static int i;

    public static void main(String[] args) {
        {
            byte[] placeholder = new byte[64 * 1024 * 1024];
//            placeholder=null;//或者加上这句也可以进行回收
        }
        /**
         * [0.010s][info][gc] Using G1
         * [0.120s][info][gc] GC(0) Pause Full (System.gc()) 67M->0M(8M) 3.980ms
         */
//        int a = 12;//加上这句就可以进行gc
//        int i;//这里的i没初始化是不能直接使用的.但是如果是类变量就可以直接使用因为有类加载的【准备阶段】将类变量进行一个默认值设置
        System.out.println("args = [" + i + "]");
        System.gc();
    }

}
